﻿/**
 * jQuery ligerUI 1.2.0
 * 
 * http://ligerui.com
 * 
 * Author daomi 2013 [ gd_star@163.com ]
 * 
 */

(function($) {
	// 气泡,可以在制定位置显示
	$.ligerTip = function(p) {
		return $.ligerui.run.call(null, "ligerTip", arguments);
	};

	// 在指定Dom Element右侧显示气泡
	// target：将ligerui对象ID附加上
	$.fn.ligerTip = function(options) {
		this.each(function() {
			var p = $.extend({}, $.ligerDefaults.ElementTip, options || {});
			p.target = p.target || this;
			// 如果是自动模式：鼠标经过时显示，移开时关闭
			if (p.auto || options == undefined) {
				if (!p.content) {
					p.content = this.title;
					if (p.removeTitle)
						$(this).removeAttr("title");
				}
				p.content = p.content || this.title;
				$(this).bind(
						'mouseover.tip',
						function() {
							p.x = $(this).offset().left + $(this).width()
									+ (p.distanceX || 0);
							p.y = $(this).offset().top + (p.distanceY || 0);
							$.ligerTip(p);
						}).bind('mouseout.tip', function() {

					var tipmanager = $.ligerui.managers[this.ligeruitipid];
					if (tipmanager) {
						tipmanager.remove();
					}
				});
			} else {
				if (p.target.ligeruitipid)
					return;
				p.x = $(this).offset().left + $(this).width()
						+ (p.distanceX || 0);
				p.y = $(this).offset().top + (p.distanceY || 0);
				p.x = p.x || 0;
				p.y = p.y || 0;
				$.ligerTip(p);
			}
		});
		return $.ligerui.get(this, 'ligeruitipid');
	};
	// 关闭指定在Dom Element(附加了ligerui对象ID,属性名"ligeruitipid")显示的气泡
	$.fn.ligerHideTip = function(options) {
		return this.each(
				function() {
					var p = options || {};
					if (p.isLabel == undefined) {
						// 如果是lable，将查找指定的input，并找到ligerui对象ID
						p.isLabel = this.tagName.toLowerCase() == "label"
								&& $(this).attr("for") != null;
					}
					var target = this;
					if (p.isLabel) {
						var forele = $("#" + $(this).attr("for"));
						if (forele.length == 0)
							return;
						target = forele[0];
					}
					var tipmanager = $.ligerui.managers[target.ligeruitipid];
					if (tipmanager) {
						tipmanager.remove();
					}
				}).unbind('mouseover.tip').unbind('mouseout.tip');
	};

	$.fn.ligerGetTipManager = function() {
		return $.ligerui.get(this);
	};

	$.ligerDefaults = $.ligerDefaults || {};

	// 隐藏气泡
	$.ligerDefaults.HideTip = {};

	// 气泡
	$.ligerDefaults.Tip = {
		content : null,
		callback : null,
		width : 150,
		height : null,
		x : 0,
		y : 0,
		appendIdTo : null, // 保存ID到那一个对象(jQuery)(待移除)
		target : null,
		auto : null, // 是否自动模式，如果是，那么：鼠标经过时显示，移开时关闭,并且当content为空时自动读取attr[title]
		removeTitle : true
	// 自动模式时，默认是否移除掉title
	};

	// 在指定Dom Element右侧显示气泡,通过$.fn.ligerTip调用
	$.ligerDefaults.ElementTip = {
		distanceX : 1,
		distanceY : -3,
		auto : null,
		removeTitle : true
	};

	$.ligerMethos.Tip = {};

	$.ligerui.controls.Tip = function(options) {
		$.ligerui.controls.Tip.base.constructor.call(this, null, options);
	};
	$.ligerui.controls.Tip
			.ligerExtend(
					$.ligerui.core.UIComponent,
					{
						__getType : function() {
							return 'Tip';
						},
						__idPrev : function() {
							return 'Tip';
						},
						_extendMethods : function() {
							return $.ligerMethos.Tip;
						},
						_render : function() {
							var g = this, p = this.options;
							var tip = $('<div class="l-verify-tip"><div class="l-verify-tip-corner"></div><div class="l-verify-tip-content"></div></div>');
							g.tip = tip;
							g.tip.attr("id", g.id);
							if (p.content) {
								$("> .l-verify-tip-content:first", tip).html(
										p.content);
								tip.appendTo('body');
							} else {
								return;
							}
							tip.css({
								left : p.x,
								top : p.y
							}).show();
							p.width
									&& $("> .l-verify-tip-content:first", tip)
											.width(p.width - 8);
							p.height
									&& $("> .l-verify-tip-content:first", tip)
											.width(p.height);
							eee = p.appendIdTo;
							if (p.appendIdTo) {
								p.appendIdTo.attr("ligerTipId", g.id);
							}
							if (p.target) {
								$(p.target).attr("ligerTipId", g.id);
								p.target.ligeruitipid = g.id;
							}
							p.callback && p.callback(tip);
							g.set(p);
						},
						_setContent : function(content) {
							$("> .l-verify-tip-content:first", this.tip).html(
									content);
						},
						remove : function() {
							if (this.options.appendIdTo) {
								this.options.appendIdTo
										.removeAttr("ligerTipId");
							}
							if (this.options.target) {
								$(this.options.target).removeAttr("ligerTipId");
								this.options.target.ligeruitipid = null;
							}
							this.tip.remove();
						}
					});
})(jQuery);